package domain.controller;

import data_source.DAO.jdbc.MedicoDAO;
import java.util.logging.Level;
import java.util.logging.Logger;
import domain.pojo.Medico;
import util.DefaultException;

/**
 * Classe de manipulação de dados do médico, atualmente faz a interface entre 
 * a apresentação e o banco de dados
 * @author Owner
 */
public class MedicoController {
    MedicoDAO modelo = null;
    
    /**
     * Construtor que inicia o DAO de médico
     */
    public MedicoController(){
	modelo = new MedicoDAO();
    }
    
    /**
     * Pega quantidade de itens na tabela médico
     * @return quantidade
     */
    public int getQuantidade(){
	return modelo.getQuantidade();
    }
    
    /**
     * Pega informações de vários médicos do BD
     * @param quantidade quantidade de linhas na tabela
     * @return objeto contendo informações de vários médicos
     */
    public Object[][] getDados(int quantidade){
	return modelo.getDados(quantidade);
    }
    
    
    public String[] getNomes(){
	return modelo.getNomesMedicos();
    }
    
    public Medico getMedicoFromNome(String nome){
	return modelo.getMedicoFromNome(nome);
    }
    
    /**
     * Pega os nomes dos médicos pertencentes à uma especialidade
     * @param item nome da especialidade
     * @return vetor contendo os médicos
     */
    public String[] getNomesEspec(String item){
	return modelo.getNomeMedicos(item);
    }
    
    /**
     * Pega o nome das especialidades
     * @return vetor com nome das especialidades
     */
    public String[] getEspecialidades(){
	return modelo.getEspecialidades();
    }
    
    /**
     * Exclui médico do BD
     * @param id id do médico a ser excluído
     * @throws DefaultException
     */
    public void excluir(int id){
	try {
	    modelo.excluir(id);
	} catch (DefaultException ex) {
	    Logger.getLogger(MedicoController.class.getName()).log(Level.SEVERE, null, ex);
	}
    }
    
    /**
     * Atualiza médico no BD
     * @param medico médico a ser atualizado
     * @throws DefaultException
     */
    public void atualizar(Medico medico){
	try {
	    modelo.atualizar(medico);
	} catch (DefaultException ex) {
	    Logger.getLogger(MedicoController.class.getName()).log(Level.SEVERE, null, ex);
	}
    }
    
    /**
     * Insere um médico no BD
     * @param medico médico a ser inserido
     * @throws DefaultException
     */
    public void incluir(Medico medico){
	try {
	    modelo.incluir(medico);
	} catch (DefaultException ex) {
	    Logger.getLogger(MedicoController.class.getName()).log(Level.SEVERE, null, ex);
	}
    }
    
    /**
     * Verifica se o médico está cadastrado e se a senha é a correta
     * @param login login do médico
     * @param senha senha do médico (transformada para MD5 no BD)
     * @return true se o médico tiver acesso e a senha estiver correta
     */
    public boolean loginOK(String login, String senha){
	return modelo.logar(login,senha) ? true : false;
    }
    
    /**
     * Pega a id de um médico segundo seu nome
     * @param nome nome do médico
     * @return id do médico
     */
    public int getIdFromNome(String nome){
	return modelo.getIdNome(nome);
    }
    
    public String getNomeFromId(int id){
	return modelo.getNomeFromID(String.valueOf(id));
    }
}

